<?php

namespace app\models\sdiot;

use yii\base\Exception;

/**
 * 省接口
 * Trait ApiSdiotTrait
 * @package app\models\sdiot
 */
trait ApiSdiotTrait
{
    /**
     * 用户日流量使用量查询
     * 根据集团或者号码批量查询当天日期之前的日流量使用量。
     * @param string $date 日期，格式为yyyyMMdd
     * @param string $groupid 集团编码，集团编码和用户号码不能全部为空
     * @param string $telnum 用户号码，多个用户号码用“,”分隔
     * @throws Exception
     * @return array
     * [
     *     {
     *         subinsid, // 成员编码
     *         susinsphome, // 成员号码
     *         inputOctets, // 日上行流量
     *         outputOctets, // 日下行流量
     *         octetsDay, // 日流量
     *         groupid, // 集团编码
     *         groupname // 集团名称
     * ]
     */
    public function sdiotQryDayGprsUsedInfo($date, $groupid, $telnum)
    {
        $data = [
            'date' => $date,
            'groupid' => $groupid,
            'telnum' => $telnum,
        ];
        $json = $this->post2('/sdiot/sdiotopen/qryDayGprsUsedInfo', $data);
        if (!$json['responseHeader']['isSuccess']) {
            throw new Exception($json['responseHeader']['resultMessage']);
        }
        return $json['list'];
    }

    /**
     * 用户月流量使用量查询
     * 根据集团或者号码批量查询当月之前的月份流量使用量。
     * @param string $date 月份，格式为yyyyMM
     * @param string $groupid 集团编码，集团编码和用户号码不能全部为空
     * @param string $telnum 用户号码，多个用户号码用“,”分隔
     * @throws Exception
     * @return array
     * [
     *     {
     *         subinsid, // 成员编码
     *         susinsphome, // 成员号码
     *         inputOctetsMonth, // 月累计上行流量
     *         outputOctetsMonth, // 月累计下行流量
     *         octetsMonth, // 月累计流量
     *         groupid, // 集团编码
     *         groupname // 集团名称
     * ]
     */
    public function sdiotQryMonGprsUsedInfo($date, $groupid, $telnum)
    {
        $data = [
            'date' => $date,
            'groupid' => $groupid,
            'telnum' => $telnum,
        ];
        $json = $this->post2('/sdiot/sdiotopen/qryMonGprsUsedInfo', $data);
        if (!$json['responseHeader']['isSuccess']) {
            throw new Exception($json['responseHeader']['resultMessage']);
        }
        return $json['list'];
    }

    /**
     * 用户使用定位服务
     * 提供号码定位服务。
     * @param string $telnum 手机号码
     * @return array
     * {
     *     url // 返回定位url
     * }
     */
    public function sdiotToPositionApp($telnum)
    {
        $uri = '/sdiot/sdiotopen/toPositionApp';
        $data = [
            'telnum' => $telnum,
        ];
        $json = $this->post2($uri, $data);
        return $json;
    }

    /**
     * 用户查询IMEI号码
     * @param array $telNumList 手机号码，最多支持300个号码
     * @return array
     * [
     *     {
     *         res_Code, // 应答码 000000 查询到IMEI卡号 其他 失败
     *         telNum, // 号码
     *         imeiOrDesc // IMEI或错误信息
     *     },
     *     ...
     * ]
     */
    public function sdiotQryTelImeiInfo($telNumList)
    {
        $uri = '/sdiot/sdiotopen/qryTelImeiInfo';
        $data = [
            'telNumList' => $telNumList,
        ];
        $json = $this->post2($uri, $data);
        return $json;
    }

    /**
     * 根据集团id查询预警数据
     * @param string $groupId 集团那边吗
     * @param string $warningType 预警类型（大写） IMEI_WARNING IMEI预警 ROAM_WARNING 漫游预警 FLOW_WARNING 流量预警 BILL_WARNING 账单预警
     * @param string $timeType 时间类型（大写） 某月：YEAR_MONTH  示例time："201801" 某月某日：YEAR_MONTH_DAY示例time："20180101"
     * @param string $time 非必填，默认当前时间。根据timeType决定是当月还是当日。格式参考timeType字段备注
     * @param string $ftpHost FTP地址
     * @param integer $ftpPort FTP端口号
     * @param string $ftpUsername FTP登录用户名
     * @param string $ftpPasswd FTP登录密码
     * @param string $ftpFolder 文件导入的目录
     * @return string 返回的文件名称说明
     * @throws Exception
     */
    public function sdiotQryWarningInfo($groupId, $warningType, $timeType, $time, $ftpHost, $ftpPort, $ftpUsername, $ftpPasswd, $ftpFolder)
    {
        $uri = '/sdiot/sdiotopen/qryWarningInfo';
        $data = [
            'groupId' => $groupId,
            'warningType' => $warningType,
            'timeType' => $timeType,
            'time' => $time,
            'ftpHost' => $ftpHost,
            'ftpPort' => $ftpPort,
            'ftpUsername' => $ftpUsername,
            'ftpPasswd' => $ftpPasswd,
            'ftpFolder' => $ftpFolder,
        ];
        $json = $this->post2($uri, $data);
        if ($json['res_code'] != 0) {
            throw new Exception($json['res_desc']);
        }
        return $json['fileName'];
    }
}
